package com.dongdong.zhuangji.excel.pile;

import com.dongdong.zhuangji.entity.PileData;
import com.dongdong.zhuangji.utils.DateToDayTime;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.DecimalFormat;
import java.util.Date;
import java.util.Random;

/**
 * @author dongdong 抖音号：W13883155245
 * @version 1.0
 * @date 2025/5/24
 * @description 单元工程施工质量报验单
 */
public class ApplicationFormforConstructionQualityInspectionandApprovalofUnitProject {
    public static void main(String[] args) throws Exception {
        String excelFilePath = "D:\\devtool\\zhuangji\\src\\main\\resources\\template\\桩基质检资料筑业版.xlsx";
        String outputFilePath = "D:\\devtool\\zhuangji\\src\\main\\resources\\template\\桩基质检资料筑业版new.xlsx";
        Workbook workbook = new XSSFWorkbook(new FileInputStream(excelFilePath));
        Sheet sheet = workbook.getSheetAt(0); // 获取已有工作表

        PileData pileData = new PileData();
        pileData.setMileage(855.123);
        pileData.setPileNumber("492-1");
        pileData.setPileBottomElevation(230.132);
        pileData.setReinforcementCageLoweringTime(new Date());
        pileData.setHoleCompletionTime(new Date());
        pileData.setPileLength(20.5);
        pileData.setSteelCageLength(21.625);
        System.out.println(new Date());

         creatApplicationForInspection(workbook,pileData);

        try (FileOutputStream out = new FileOutputStream(outputFilePath)) {
            workbook.write(out);
        }
    }


    public static void creatApplicationForInspection(Workbook workbook,PileData pileData) throws Exception {
        creatsheet0(workbook,pileData);
        creatsheet1and2(workbook,pileData);
        creatsheet3and4(workbook,pileData);
        creatsheet5and6(workbook,pileData);

    }

    public static void creatsheet0( Workbook workbook, PileData pileData) {
        Sheet sheet=workbook.getSheet("sheet0");
        String value="(K0+"+pileData.getMileage()+")"+pileData.getPileNumber()+"#桩";
        sheet.getRow(2).getCell(5).setCellValue(value);
        sheet.getRow(8).getCell(4).setCellValue(value);
    }
    public static void creatsheet1and2( Workbook workbook, PileData pileData) {
        Sheet sheet1=workbook.getSheet("Sheet1");

        String ac4=pileData.getPileNumber()+"#桩机械钻孔";
        String h5=pileData.getPileNumber()+"#桩基";
        String ac5=new DateToDayTime().toLoaclDays(pileData.getHoleCompletionTime());

        DecimalFormat df = new DecimalFormat("0.00");
        DecimalFormat df1 = new DecimalFormat("0.000");
        Random random=new Random();
        double d1= pileData.getPileLength()+pileData.getOverPouringLength();//桩长+超灌长度
        double d= pileData.getGroundElevation()-pileData.getActualPileBottomElevation();//地面标高-实际桩底
        if (d<d1){
            d=d1+0.2;
        }
        double d2=d-d1;
        double e=d+d2/10;
        double b=d-d2/10;
        double c=d*3-e-b;

        String l8="≥"+df1.format(d1)+"m";

        String j10=""+random.nextInt(99);
        String l10=df1.format(e);
        String p10=""+random.nextInt(50);

        String v10=df.format(random.nextDouble());
        int a=random.nextInt(50);
        String x10=""+(1500+a);
        String z10=""+a;

        String j11=""+random.nextInt(99);
        String l11=df1.format(b);
        String p11=""+random.nextInt(50);

        String j12=""+random.nextInt(99);
        String l12=df1.format(c);
        String p12=""+random.nextInt(50);

        // 设置单元格值
        sheet1.getRow(3).getCell(28).setCellValue(ac4);
        sheet1.getRow(4).getCell(7).setCellValue(h5);
        sheet1.getRow(4).getCell(28).setCellValue(ac5);
        sheet1.getRow(9).getCell(9).setCellValue(j10);
        sheet1.getRow(7).getCell(11).setCellValue(l8);
        sheet1.getRow(9).getCell(11).setCellValue(l10);
        sheet1.getRow(9).getCell(15).setCellValue(p10);
        sheet1.getRow(9).getCell(21).setCellValue(v10);
        sheet1.getRow(9).getCell(23).setCellValue(x10);
        sheet1.getRow(9).getCell(25).setCellValue(z10);
        sheet1.getRow(10).getCell(9).setCellValue(j11);
        sheet1.getRow(10).getCell(11).setCellValue(l11);
        sheet1.getRow(10).getCell(15).setCellValue(p11);
        sheet1.getRow(11).getCell(9).setCellValue(j12);
        sheet1.getRow(11).getCell(11).setCellValue(l12);
        sheet1.getRow(11).getCell(15).setCellValue(p12);

        Sheet sheet2=workbook.getSheet("Sheet2");
        //String value2="ai4 l6 ai6 ap6 w8 w9 w10 w13 w15";


        String ai4 = ac4;
        String l6 = h5;
        String ai6 = ac5;
        String ap6 = new DateToDayTime().toLoaclDays(pileData.getReinforcementCageLoweringTime());
        String w8 = "检查三点："+j10+"mm、"+j11+"mm、"+j12+"mm";
        String w9 = "检查三点："+l10+"m、"+l11+"m、"+l12+"m";
        String w10 = "检查三点："+p10+"mm、"+p11+"mm、"+p12+"mm";
        String w13 = v10;
        String w15 = z10;

        sheet2.getRow(3).getCell(34).setCellValue(ai4);
        sheet2.getRow(5).getCell(11).setCellValue(l6);
        sheet2.getRow(5).getCell(34).setCellValue(ai6);
        sheet2.getRow(5).getCell(41).setCellValue(ap6);
        sheet2.getRow(7).getCell(22).setCellValue(w8);
        sheet2.getRow(8).getCell(22).setCellValue(w9);
        sheet2.getRow(9).getCell(22).setCellValue(w10);
        sheet2.getRow(12).getCell(22).setCellValue(w13);
        sheet2.getRow(14).getCell(22).setCellValue(w15);
    }
    public static void creatsheet3and4( Workbook workbook, PileData pileData) {
        Sheet sheet3=workbook.getSheet("Sheet3");
        DecimalFormat df = new DecimalFormat("0.000");
        // y4 g5 y5 ae8 g11 g12 g13 j11 j12 j13 m11 m12 m13 p11 p12 p13 s11 s12 s13 v11 v12 v13 y11 y12 y13 ab11 ab12 ab13 ae11 ae12 ae13 ah11 ah12 ah13
        // 变量声明部分


        String y4 = pileData.getPileNumber()+"#桩基钢筋笼";
        String g5 = pileData.getPileNumber()+"#桩基";
        String y5 = new DateToDayTime().toLoaclDays(pileData.getReinforcementCageLoweringTime());
        String ae8 = pileData.getSteelCageLength()+"";

        int a=178;
        int num=between(-9,9,a);
        String g11 = num+"";
        String j11 = ""+Math.abs(num-a);

        num=between(-9,9,a);
        String g12 = num+"";
        String j12 = ""+Math.abs(num-a);
        num=between(-9,9,a);
        String g13 = num+"";
        String j13 = ""+Math.abs(num-a);
        double num1=Math.abs(pileData.getSteelCageLength()-pileData.getActualSteelCageLength() );
        String m11 = ""+df.format(pileData.getActualSteelCageLength());
        //String m12 = "";
        //String m13 = "";
        String p11 = ""+df.format(num1);
       // String p12 = "";
        //String p13 = "";

        int num2=between(-20,20,200);
        String s11 = ""+num2;
        String v11 = ""+Math.abs(num2-200);

        num2=between(-20,20,200);
        String s12 = ""+num2;
        String v12 = ""+Math.abs(num2-200);

        num2=between(-10,10,100);
        String s13 = ""+num2;
        String v13 = ""+Math.abs(num2-100);

        int num3=between(-10,10,1410);
        String y11 = ""+num3;
        String ab11 = ""+Math.abs(num3-1410);
        num3=between(-10,10,1410);
        String y12 = ""+num3;
        String ab12 = ""+Math.abs(num3-1410);
        num3=between(-10,10,1410);
        String y13 = ""+num3;
        String ab13 = ""+Math.abs(num3-1410);;

        double num4=Math.random()*0.3;
        String ae11 = ""+df.format(pileData.getSteelCageLength()+num4);
       // String ae12 = "";
       // String ae13 = "";
        String ah11 = ""+df.format(num4);
       // String ah12 = "";
       // String ah13 = "";

// 单元格赋值部分
// 第4行
        sheet3.getRow(3).getCell(24).setCellValue(y4);

// 第5行
        sheet3.getRow(4).getCell(6).setCellValue(g5);
        sheet3.getRow(4).getCell(24).setCellValue(y5);

// 第8行
        sheet3.getRow(7).getCell(30).setCellValue(ae8);

// 第11行
        sheet3.getRow(10).getCell(6).setCellValue(g11);
        sheet3.getRow(10).getCell(9).setCellValue(j11);
        sheet3.getRow(10).getCell(12).setCellValue(m11);
        sheet3.getRow(10).getCell(15).setCellValue(p11);
        sheet3.getRow(10).getCell(18).setCellValue(s11);
        sheet3.getRow(10).getCell(21).setCellValue(v11);
        sheet3.getRow(10).getCell(24).setCellValue(y11);
        sheet3.getRow(10).getCell(27).setCellValue(ab11);
        sheet3.getRow(10).getCell(30).setCellValue(ae11);
        sheet3.getRow(10).getCell(33).setCellValue(ah11);

// 第12行
        sheet3.getRow(11).getCell(6).setCellValue(g12);
        sheet3.getRow(11).getCell(9).setCellValue(j12);
        //sheet3.getRow(11).getCell(12).setCellValue(m12);
       // sheet3.getRow(11).getCell(15).setCellValue(p12);
        sheet3.getRow(11).getCell(18).setCellValue(s12);
        sheet3.getRow(11).getCell(21).setCellValue(v12);
        sheet3.getRow(11).getCell(24).setCellValue(y12);
        sheet3.getRow(11).getCell(27).setCellValue(ab12);
       // sheet3.getRow(11).getCell(30).setCellValue(ae12);
      //  sheet3.getRow(11).getCell(33).setCellValue(ah12);

// 第13行
        sheet3.getRow(12).getCell(6).setCellValue(g13);
        sheet3.getRow(12).getCell(9).setCellValue(j13);
       // sheet3.getRow(12).getCell(12).setCellValue(m13);
       // sheet3.getRow(12).getCell(15).setCellValue(p13);
        sheet3.getRow(12).getCell(18).setCellValue(s13);
        sheet3.getRow(12).getCell(21).setCellValue(v13);
        sheet3.getRow(12).getCell(24).setCellValue(y13);
        sheet3.getRow(12).getCell(27).setCellValue(ab13);
       // sheet3.getRow(12).getCell(30).setCellValue(ae13);
        //sheet3.getRow(12).getCell(33).setCellValue(ah13);

        //ai4 l6 ai6 ap6 w8 w9 w10 w11 w12 t13 w13
        // 变量声明部分
        String ai4 = y4;
        String l6 = g5;
        String ai6 =  new DateToDayTime().toLoaclDays(pileData.getTimeForReinforcementCageAcceptance());;
        String ap6 = y5;
        String w8 = "设计主筋间距为178mm，检查3个点，分别为"+g11+"mm，"+g12+"mm，"+g13+"mm";
        String w9 = "设计钢筋笼长度"+ae8+"m，实测钢筋笼长度"+m11+"m";
        String w11 = "箍筋间距200mm，加密区间距为100mm，检查3个点"+s11+"mm，"+s12+"mm，"+s13+"mm";
        String w12 = "钢筋笼直径为1410mm，实测值"+y11+"mm,"+y12+"mmm，"+y13+"mm";
        String p13 = "符合设计或规范要求深度"+ae8+"m，允许偏差±30mm";
        String w13 = "实测"+ae11+"m";

        Sheet sheet4 = workbook.getSheet("Sheet4");
// 单元格赋值部分
        sheet4.getRow(3).getCell(34).setCellValue(ai4);  // AI4
        sheet4.getRow(5).getCell(11).setCellValue(l6);   // L6
        sheet4.getRow(5).getCell(34).setCellValue(ai6);  // AI6
        sheet4.getRow(5).getCell(41).setCellValue(ap6);  // AP6
        sheet4.getRow(7).getCell(22).setCellValue(w8);   // W8
        sheet4.getRow(8).getCell(22).setCellValue(w9);   // W9
        //sheet4.getRow(9).getCell(22).setCellValue(w10);  // W10
        sheet4.getRow(10).getCell(22).setCellValue(w11); // W11
        sheet4.getRow(11).getCell(22).setCellValue(w12); // W12
        sheet4.getRow(12).getCell(15).setCellValue(p13); // T13
        sheet4.getRow(12).getCell(22).setCellValue(w13); // W13
    }

    public static void creatsheet5and6( Workbook workbook, PileData pileData) {
        Sheet sheet5=workbook.getSheet("Sheet5");
        DecimalFormat df = new DecimalFormat("0.00");
// af4 h5 af5 h10 h11 n10 n11 z10 z11 af10 af11 al10
        String af4 = pileData.getPileNumber()+"#桩基混凝土浇筑";
        String h5 = pileData.getPileNumber()+"#桩基";
        String af5 = new DateToDayTime().toLoaclDays(pileData.getReinforcementCageLoweringTime());
        Random random=new Random();
        String h10 = ""+(random.nextInt(3)+4);
        String h11 = ""+(random.nextInt(3)+4);
        String n10 = ""+(random.nextInt(3)+5);
        String n11 = ""+(random.nextInt(3)+5);
        String t10 = ""+(random.nextInt(5)+36);
        String t11 = ""+(random.nextInt(5)+36);
        String z10 = ""+(random.nextInt(4)+18);
        String z11 = ""+(random.nextInt(4)+18);
        String af10 = ""+(random.nextInt(4)+34);
        String af11 = ""+(random.nextInt(4)+34);
        String al10 = df.format(random.nextDouble()*0.9+0.6);

// 单元格赋值部分
        sheet5.getRow(3).getCell(31).setCellValue(af4);  // AF4
        sheet5.getRow(4).getCell(7).setCellValue(h5);    // H5
        sheet5.getRow(4).getCell(31).setCellValue(af5);  // AF5
        sheet5.getRow(9).getCell(7).setCellValue(h10);   // H10
        sheet5.getRow(10).getCell(7).setCellValue(h11);  // H11
        sheet5.getRow(9).getCell(13).setCellValue(n10);  // N10
        sheet5.getRow(10).getCell(13).setCellValue(n11); // N11
        sheet5.getRow(9).getCell(22).setCellValue(t10);  // t10
        sheet5.getRow(10).getCell(22).setCellValue(t11);  // t11
        sheet5.getRow(9).getCell(25).setCellValue(z10);  // Z10
        sheet5.getRow(10).getCell(25).setCellValue(z11); // Z11
        sheet5.getRow(9).getCell(31).setCellValue(af10); // AF10
        sheet5.getRow(10).getCell(31).setCellValue(af11); // AF11
        sheet5.getRow(9).getCell(37).setCellValue(al10); // AL10

        // af4 h5 af5 h10 h11 n10 n11 z10 z11 af10 af11 al10
        //ah4 l6 ah6 ap6 w8 w9 w10 w12 w13 w14 w15

        // 变量声明部分
        String ah4 = af4;
        String l6 = h5;
        String ah6 = af5;
        String ap6 = af5;
        String w8 = "检测两点："+h10+"m、 "+h11+"m";
        String w9 = "检测两点："+n10+"m、 "+n11+"m";
        String w10 = "检测两点："+t10+" MPa、 "+t11+" MPa";
        String w12 = "检测两点："+z10+"cm、"+z11+"cm";
        String w13 = "检测两点："+af10+"cm、"+af11+"cm";
        String w14 = df.format(pileData.getPileLength()+0.1+Double.parseDouble(al10))+"m,高于设计高度"+al10+"m";
        String w15 = "检测一点："+df.format(pileData.getActualPouringVolume()/((pileData.getPileLength()+pileData.getOverPouringLength())*Math.PI*pileData.getPileDiameter()*pileData.getPileDiameter()/4))+"m";

        Sheet sheet6 = workbook.getSheet("Sheet6");
// 单元格赋值部分
        sheet6.getRow(3).getCell(33).setCellValue(ah4);  // AH4
        sheet6.getRow(5).getCell(11).setCellValue(l6);   // L6
        sheet6.getRow(5).getCell(33).setCellValue(ah6);  // AH6
        sheet6.getRow(5).getCell(41).setCellValue(ap6);  // AP6
        sheet6.getRow(7).getCell(22).setCellValue(w8);   // W8
        sheet6.getRow(8).getCell(22).setCellValue(w9);   // W9
        sheet6.getRow(9).getCell(22).setCellValue(w10);  // W10
        sheet6.getRow(11).getCell(22).setCellValue(w12); // W12
        sheet6.getRow(12).getCell(22).setCellValue(w13); // W13
        sheet6.getRow(13).getCell(22).setCellValue(w14); // W14
        sheet6.getRow(14).getCell(22).setCellValue(w15); // W15
    }
    private static int between(int min,int max,int value) {
        Random random = new Random();
        // 生成 -10 到 10 之间的随机整数（包含 -10 和 10）
        return value+random.nextInt(max - min + 1) + min;
    }
}
